package com.shlh.saas.entity.twitter;

import lombok.Data;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

/**
 * Twitter用户ES实体类
 * 对应twitter_users索引的文档结构
 */
@Data
public class TwitterUserEs {
    
    // ==================== 基础字段 ====================
    
    /**
     * Twitter用户ID
     */
    private String id;
    
    /**
     * 数据源表ID
     */
    private String sourceId;
    
    /**
     * 数据源表名
     */
    private String sourceTable;
    
    /**
     * 数据有效性标识
     */
    private Boolean valid;
    
    /**
     * 数据迁移时间戳
     */
    private Date migrationTimestamp;
    
    // ==================== 用户信息字段 ====================
    
    /**
     * 用户真实姓名
     */
    private String name;
    
    /**
     * 用户屏幕名称（推特账号）
     */
    private String screenName;
    
    /**
     * 用户邮箱
     */
    private String email;
    
    /**
     * 粉丝数量
     */
    private Integer followers;
    
    /**
     * 账户创建时间
     */
    private Date createdAt;
    
    // ==================== 查询相关字段 ====================
    
    /**
     * 联系方式筛选（email/phone）
     */
    private String contactMethod;
    
    /**
     * 粉丝数量范围（最小值）
     */
    private Integer minFollowers;
    
    /**
     * 粉丝数量范围（最大值）
     */
    private Integer maxFollowers;
    
    /**
     * 创建年份
     */
    private List<Integer> createdYear;
    
    /**
     * 是否验证用户
     */
    private Boolean verified;
    
    // ==================== 分页相关字段 ====================
    
    /**
     * 当前页码
     */
    private long current = 1;
    
    /**
     * 每页大小
     */
    private long size = 10;
    
    /**
     * 总记录数
     */
    private long total;
    
    // ==================== ES查询相关字段 ====================
    
    /**
     * ES查询评分
     */
    private BigDecimal score;
    
    /**
     * ES文档ID
     */
    private String docId;
    
    /**
     * 查询关键词（用于高亮显示）
     */
    private String keyword;
    
    /**
     * 排序字段
     */
    private String sortField;
    
    /**
     * 排序方向（asc/desc）
     */
    private String sortOrder;
    
    // ==================== 业务逻辑方法 ====================
    
    /**
     * 检查是否有邮箱
     * 
     * @return 是否有邮箱
     */
    public boolean hasEmail() {
        return email != null && !email.trim().isEmpty() && email.contains("@");
    }
    
    /**
     * 检查是否有屏幕名称
     * 
     * @return 是否有屏幕名称
     */
    public boolean hasScreenName() {
        return screenName != null && !screenName.trim().isEmpty();
    }
    
    /**
     * 检查是否有真实姓名
     * 
     * @return 是否有真实姓名
     */
    public boolean hasName() {
        return name != null && !name.trim().isEmpty();
    }
    
    /**
     * 检查粉丝数是否在指定范围内
     * 
     * @param min 最小值
     * @param max 最大值
     * @return 是否在范围内
     */
    public boolean isFollowersInRange(Integer min, Integer max) {
        if (followers == null) {
            return false;
        }
        
        if (min != null && followers < min) {
            return false;
        }
        
        if (max != null && followers > max) {
            return false;
        }
        
        return true;
    }
    
    /**
     * 获取显示名称（优先使用真实姓名，其次使用屏幕名称）
     * 
     * @return 显示名称
     */
    public String getDisplayName() {
        if (hasName()) {
            return name;
        }
        if (hasScreenName()) {
            return screenName;
        }
        return "Unknown User";
    }
    
    /**
     * 获取联系方式类型
     * 
     * @return 联系方式类型
     */
    public String getContactType() {
        if (hasEmail()) {
            return "email";
        }
        return "none";
    }
    
    /**
     * 检查是否为有效用户
     * 
     * @return 是否为有效用户
     */
    public boolean isValidUser() {
        return valid != null && valid && (hasEmail() || hasScreenName());
    }
    
    /**
     * 格式化粉丝数显示
     *
     * @return 格式化的粉丝数
     */
    public String getFormattedFollowers() {
        if (followers == null) {
            return "0";
        }
        
        if (followers >= 1000000) {
            return String.format("%.1fM", followers / 1000000.0);
        } else if (followers >= 1000) {
            return String.format("%.1fK", followers / 1000.0);
        } else {
            return String.valueOf(followers);
        }
    }
    
    /**
     * 转换为字符串表示
     * 
     * @return 字符串表示
     */
    @Override
    public String toString() {
        return "TwitterUserEs{" +
                "id='" + id + '\'' +
                ", name='" + name + '\'' +
                ", screenName='" + screenName + '\'' +
                ", email='" + email + '\'' +
                ", followers=" + followers +
                ", valid=" + valid +
                ", sourceTable='" + sourceTable + '\'' +
                ", sourceId='" + sourceId + '\'' +
                '}';
    }
}
